【经典算法】最短路径算法

您所在的位置:网站首页 ford 什么意思 【经典算法】最短路径算法

【经典算法】最短路径算法

2024-06-20 05:08| 来源: 网络整理| 查看: 265

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀算法启示录

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 

目录

前言

松弛视角

伪代码展示

三角形理论 

 松弛操作可行性证明

 Bellman-Ford算法

算法思想

1.流程描述

2.流程图解

3.流程阐释

算法伪代码

算法证明 

路径松弛性质

最短路径证明

总结

前言

最短路径算法是图论中一类重要算法,其功能就如名字一样——求解点与点之间最短距离。

首先,先让我们对最短路径算法有一个概观,看看都有哪些种类的最短路径算法,每一个种类中代表的算法又是什么。

单源最短路径算法:从一个起点出发求解其到其他所有其他点的最短距离

多源最短路径算法:从所有点出发求解其到其他所有其他点的最短距离 

松弛视角

关键点:

1、松弛和动态规划都是解决最短路径的方法。

2、松弛的本质就是对图固有属性三角理论的修正。

3、松弛和动态规划方法存在一定的重合,有时可以相互转化。两者并未有固定的优秀等次之分。

4、一些算法采用松弛视角解决,另一些采用动态规划视角来解决

伪代码展示

最短路径的求解包含两个步骤:一、初始化操作;二、松弛操作

松弛是最短路径求解过程中最好用的手段之一

两个操作的伪代码如下:

初始化操作:

INITIALIZE(G,s) for each vertex v ∈ G.V v.d=∞ v.π=NULL s.d=0

松弛操作:

RELAX(u,v,w) if v.d>u.d+w(u,v) v.d=u.d+w(u,v) v.π=u

松弛操作的本质是对三角形理论的修正 

三角形理论 

定义:

对于任何边(u,v)∈E,都有d(s,v)u.d+w(u,v) return FALSE return TRUE RELAX(u,v,w) if v.d>u.d+w(u,v) v.d=u.d+w(u,v) v.π=u 算法证明 

贝尔曼福特算法的证明包括:1、最短路径证明;2、算法返回值完整性证明

这里我们重点来看最短路径证明:1、路径松弛性质;2、最短路径证明

路径松弛性质

理解关键点: 

1、本性质的成立和松弛操作无关。也就是说这些操作不一定是连续进行的,在彼此之间可以穿插其他的松弛操作。只要按这个相对顺序进行这样一遍松弛处理,那么我们一定能够得到vk的最短路径(即使是在第一轮松弛中,我们就按这个顺序进行松弛,依旧能得到vk的最短路径)

最短路径证明

理解关键点: 

1、假如路径长为k,也就是以vk为目的点。由于没有环,所以k小于等于V-1。而我们可以进行V-1次松弛,每次松弛都是对所有边进行的。也就是说第一次松弛必然有(v0,v1),第二次松弛有(v1,v2),第三次则有(v2,v3)以此类推,最后必然可以(因为k小于等于V-1)到(vk-1,vk),也就说vk必然已经得到最短路径。证毕~~

总结

本文到这里就结束啦~~

本篇文章的撰写花了本喵两个多小时

如果仍有不够希望大家多多包涵~~如果觉得对你有帮助,辛苦友友点个赞哦~

知识来源:《算法导论》、山东大学孔凡玉老师ppt。不要用于商业用途转发哦~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3